﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Negocio.Interface;
using Metadados;
using Dados;
using System.Data;

namespace Negocio
{
    public class NGProduto
    {
        private ITCadastroProduto telaCadastro;

        int proCodigo { get; set; }
        string proDescricao { get; set; }
        string proCodigoBarra { get; set; }
        string proNcm { get; set; }
        int undCodigo { get; set; }
        string mensagem { get; set; }


        public NGProduto(ITCadastroProduto telaCadastroProduto)
        {
            telaCadastro = telaCadastroProduto;
        }

        #region Pegar e Colocar dados na Tela
        
        private Produto pegarDados()
        {
            return new Produto
            {
                proCodigo = telaCadastro.proCodigo,
                proDescricao = telaCadastro.proDescricao,
                proCodigoBarra = telaCadastro.proCodigoBarra,
                proNcm = telaCadastro.proNcm,
                undCodigo = telaCadastro.undCodigo
            };
        }

        private void colocarDados(Produto obj)
        {
            telaCadastro.proCodigo = obj.proCodigo;
            telaCadastro.proDescricao = obj.proDescricao;
            telaCadastro.proCodigoBarra = obj.proCodigoBarra;
            telaCadastro.proNcm = obj.proNcm;
            telaCadastro.undCodigo = obj.undCodigo;
        }
        #endregion

        #region Manipulacao

        public void gravar()
        {

            #region Validações
            if (telaCadastro.proCodigo == int.MinValue)
            {
                telaCadastro.mensagem = " O campo codigo é obrigatorio! ";
                return;
            }

            if (telaCadastro.proDescricao == string.Empty)
            {
                telaCadastro.mensagem = " O campo descrição é obrigatorio! ";
                return;
            }

            if (telaCadastro.proCodigoBarra == string.Empty)
            {
                telaCadastro.mensagem = " O campo código de barras é obrigatorio! ";
                return;
            }

            if (telaCadastro.proNcm == string.Empty)
            {
                telaCadastro.mensagem = " O campo NCM é obrigatorio! ";
                return;
            }

            # endregion

            DBProduto objDados = new DBProduto();

            Produto objProduto = new Produto();

            objProduto = pegarDados();

            if (!consultar(objProduto.proCodigo))
            {
                if (objDados.incluir(objProduto))
                {
                    telaCadastro.mensagem = "Produto cadastrado com sucesso!";
                    limpaTela();
                }
                else
                {
                    telaCadastro.mensagem = "Erro no cadastro de produto!";
                }
            }
            else
            {
                if (objDados.atualizar(objProduto))
                {
                    colocarDados(objProduto);
                    telaCadastro.mensagem = "Produto alterado com sucesso!";
                    limpaTela();
                }
                else
                {
                    telaCadastro.mensagem = "Erro ao alterar o Produto!";
                }
            }

        }

        public void deletar(int p_proCodigo)
        {
            DBProduto objDados = new DBProduto();

            if (objDados.excluir(p_proCodigo))
            {
                telaCadastro.mensagem = "Produto excluido com sucesso!";
            }
            else
            {
                telaCadastro.mensagem = "Produto não pode ser excluido!";
            }

            limpaTela();
        }

        public void limpaTela()
        {
            telaCadastro.proCodigo = int.MinValue;
            telaCadastro.proDescricao = string.Empty;
            telaCadastro.proCodigoBarra = string.Empty;
            telaCadastro.proNcm = string.Empty;
            telaCadastro.undCodigo = int.MinValue;
        }

        public bool consultar(int p_proCodigo)
        {
            DBProduto objDados = new DBProduto();

            try
            {
                colocarDados(objDados.consultar(p_proCodigo)[0]);
                return true;
            }
            catch (Exception)
            {

                return false;
            }

        }

        public DataView ListarProdutos(string nomeCampo, string tipoCampo, string descricao)
        {
            DBProduto objDados = new DBProduto();
            try
            {
                return objDados.listarProdutos(nomeCampo, tipoCampo, descricao);  
                
            }
            catch (Exception)
            {

                return null;
            }
        }
        #endregion
    }
}
